Django অ্যাপ্লিকেশন ডিপ্লয় করার প্রক্রিয়া একটি গুরুত্বপূর্ণ পদক্ষেপ, যাতে আপনার লোকাল ডেভেলপমেন্ট পরিবেশ থেকে অ্যাপ্লিকেশনটি একটি লাইভ পরিবেশে (যেমন, AWS, DigitalOcean, Heroku, বা অন্যান্য সার্ভারে) স্থানান্তরিত হয়। প্রোডাকশন পরিবেশে Django অ্যাপ্লিকেশন চলানোর জন্য কিছু বিশেষ কনফিগারেশন এবং অপ্টিমাইজেশন প্রয়োজন, যেমন সিকিউরিটি, পারফরম্যান্স, এবং স্কেলেবিলিটি।
Django ডিপ্লয়মেন্টের জন্য প্রস্তুতি
Django অ্যাপ্লিকেশন প্রোডাকশন পরিবেশে ডিপ্লয় করার আগে কিছু প্রস্তুতি নেয়া প্রয়োজন। নিচে ধাপে ধাপে সেই প্রস্তুতিসমূহ আলোচনা করা হলো।
১. ডেটাবেস কনফিগারেশন
প্রোডাকশন পরিবেশে Django অ্যাপ্লিকেশন চালানোর সময় আপনাকে ডেটাবেস কনফিগারেশন পরিবর্তন করতে হবে। সাধারণত, আপনি প্রোডাকশনের জন্য PostgreSQL বা MySQL ব্যবহার করবেন, যা SQLite এর পরিবর্তে আরও স্কেলেবল।
উদাহরণ: PostgreSQL কনফিগারেশন
settings.py ফাইলে ডেটাবেস কনফিগারেশন আপডেট করুন:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost', # অথবা আপনার প্রোডাকশন সার্ভারের আইপি
'PORT': '5432',
}
}
এছাড়া, প্রোডাকশন পরিবেশে ডেটাবেস মাইগ্রেশন চালাতে হবে:
python manage.py migrate
২. সিকিউরিটি কনফিগারেশন
প্রোডাকশন পরিবেশে সিকিউরিটি অত্যন্ত গুরুত্বপূর্ণ। Django ডিফল্টভাবে কিছু সিকিউরিটি বৈশিষ্ট্য প্রদান করে, তবে আপনাকে সেগুলো সক্রিয় করতে হবে।
SECRET_KEY নিরাপদ রাখা
প্রথমত, SECRET_KEY একটি অত্যন্ত গুরুত্বপূর্ণ সেটিং যা সিকিউরিটির জন্য প্রয়োজন। প্রোডাকশন পরিবেশে এটি একটি শক্তিশালী এবং সিকিউরিটি বিশিষ্ট কীগুলোর সাথে আপডেট করা উচিত। সাধারণত, আপনি এটি পরিবেশ ভেরিয়েবল হিসেবে সংরক্ষণ করবেন।
# settings.py
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', 'fallback-secret-key')
এটি পরিবেশ ভেরিয়েবল থেকে নেওয়া হবে, এবং যদি তা পাওয়া না যায় তবে ডিফল্ট ফ্যালব্যাক কী ব্যবহার হবে।
Debug বন্ধ করা
প্রোডাকশন পরিবেশে DEBUG সেটিংটি অবশ্যই False করতে হবে, কারণ এটি নিরাপত্তা ঝুঁকি তৈরি করতে পারে।
# settings.py
DEBUG = False
Allowed Hosts কনফিগারেশন
আপনাকে ALLOWED_HOSTS কনফিগারেশনও সঠিকভাবে সেট করতে হবে, যা আপনার অ্যাপ্লিকেশন কোন ডোমেইনে হোস্ট হবে তা নির্দেশ করে।
# settings.py
ALLOWED_HOSTS = ['your-domain.com', 'www.your-domain.com']
৩. স্ট্যাটিক ফাইল এবং মিডিয়া ফাইল কনফিগারেশন
প্রোডাকশন পরিবেশে Django অ্যাপ্লিকেশন যখন চলবে, তখন স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ) এবং মিডিয়া ফাইল (যেমন ইউজারের আপলোড করা ফাইল) সঠিকভাবে পরিবেশন করতে হবে। এজন্য, আপনি WhiteNoise বা Nginx এর মতো সার্ভার ব্যবহার করতে পারেন।
স্ট্যাটিক ফাইল সংগ্রহ
প্রথমত, Django এর স্ট্যাটিক ফাইলগুলো collectstatic কমান্ড ব্যবহার করে একত্রিত করতে হবে:
python manage.py collectstatic
এই কমান্ডটি সমস্ত স্ট্যাটিক ফাইল একত্রিত করে প্রোডাকশন পরিবেশের জন্য প্রস্তুত করবে।
মিডিয়া ফাইল কনফিগারেশন
প্রোডাকশন পরিবেশে মিডিয়া ফাইল (যেমন ইউজারের আপলোড করা ছবি) আলাদা সার্ভারে রাখা উচিত। আপনি Amazon S3 বা অন্য কোনো ক্লাউড স্টোরেজ ব্যবহার করতে পারেন।
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
৪. WSGI সার্ভার কনফিগারেশন
প্রোডাকশন পরিবেশে Django অ্যাপ্লিকেশন চালানোর জন্য একটি WSGI (Web Server Gateway Interface) সার্ভার প্রয়োজন। সাধারণত, আপনি Gunicorn ব্যবহার করতে পারেন।
Gunicorn ইনস্টল এবং কনফিগারেশন
Gunicorn ইনস্টল করুন:
pip install gunicorn
এখন, Gunicorn সার্ভার ব্যবহার করে Django অ্যাপ্লিকেশন চালাতে পারেন:
gunicorn myproject.wsgi:application
এটি আপনার Django অ্যাপ্লিকেশন চালাবে এবং এটি Nginx বা অন্য কোনো ওয়েব সার্ভারের সাথে ইন্টিগ্রেট করা যাবে।
৫. Nginx এবং Gunicorn দিয়ে প্রোডাকশন সার্ভার কনফিগারেশন
Nginx সাধারণত স্ট্যাটিক ফাইলের জন্য ব্যবহৃত হয় এবং Gunicorn ডাইনামিক কন্টেন্ট হ্যান্ডেল করে। Nginx এবং Gunicorn এর মধ্যে সঠিক কনফিগারেশন প্রয়োজন।
Nginx কনফিগারেশন
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8000; # Gunicorn সার্ভার পোর্ট
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static/ {
alias /path/to/static/; # স্ট্যাটিক ফাইলের অবস্থান
}
location /media/ {
alias /path/to/media/; # মিডিয়া ফাইলের অবস্থান
}
}
৬. HTTPS কনফিগারেশন (SSL)
প্রোডাকশন পরিবেশে HTTPS ব্যবহারের জন্য SSL সনদ (Certificate) প্রয়োজন। আপনি Let's Encrypt এর মাধ্যমে SSL সনদ ফ্রি তে পেতে পারেন। এর মাধ্যমে আপনি আপনার Django অ্যাপ্লিকেশনকে নিরাপদ করতে পারবেন।
SSL কনফিগারেশন
Nginx এ SSL কনফিগারেশন করার পর, আপনি Django অ্যাপ্লিকেশনকে HTTPS এ রিডাইরেক্ট করতে পারেন:
# settings.py
SECURE_SSL_REDIRECT = True # HTTP থেকে HTTPS এ রিডাইরেক্ট হবে
SECURE_HSTS_SECONDS = 3600 # HTTP Strict Transport Security
৭. লগিং এবং মনিটরিং
প্রোডাকশন পরিবেশে অ্যাপ্লিকেশন মনিটরিং এবং লগিং অত্যন্ত গুরুত্বপূর্ণ। Django এর লগিং সিস্টেম ব্যবহার করে আপনি ত্রুটি এবং অন্যান্য গুরুত্বপূর্ণ তথ্য ট্র্যাক করতে পারবেন।
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'filename': '/path/to/django/error.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'ERROR',
'propagate': True,
},
},
}
সারাংশ
Django অ্যাপ্লিকেশন প্রোডাকশন পরিবেশে ডিপ্লয় করার জন্য উপরে উল্লেখিত পদক্ষেপগুলো অনুসরণ করা উচিত। ডেটাবেস কনফিগারেশন, সিকিউরিটি সেটিংস, স্ট্যাটিক এবং মিডিয়া ফাইল হ্যান্ডলিং, WSGI সার্ভার এবং HTTPS কনফিগারেশন সবগুলোই আপনার অ্যাপ্লিকেশনকে নিরাপদ, স্কেলেবল এবং কার্যকরীভাবে চালাতে সহায়তা করবে।
Django অ্যাপ্লিকেশন ডিপ্লয়মেন্ট হল আপনার Django প্রজেক্টটিকে প্রোডাকশন এনভায়রনমেন্টে বা লাইভ সার্ভারে হোস্ট করার প্রক্রিয়া। এটি অত্যন্ত গুরুত্বপূর্ণ, কারণ আপনার অ্যাপ্লিকেশনটি লাইভ ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য হবে। Django অ্যাপ্লিকেশন ডিপ্লয়মেন্ট করার জন্য কয়েকটি গুরুত্বপূর্ণ স্টেপ আছে, যেমন সার্ভার সেটআপ, নিরাপত্তা কনফিগারেশন, এবং ওয়েব সার্ভার ব্যবস্থাপনা।
এই টিউটোরিয়ালে, আমরা Django অ্যাপ্লিকেশনকে Heroku এবং DigitalOcean (বা আপনার পছন্দমত যেকোনো VPS) সার্ভারে ডিপ্লয় করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করব।
১. প্রজেক্টের প্রস্তুতি
ডিপ্লয়মেন্টের আগে কিছু সাধারণ প্রস্তুতি নিতে হয়:
১.১. DEBUG মোড বন্ধ করা
প্রোডাকশন এনভায়রনমেন্টে Django প্রজেক্টে DEBUG মোড বন্ধ রাখতে হবে। এটি settings.py ফাইলে করা যায়:
# settings.py
DEBUG = False
এছাড়া, ALLOWED_HOSTS কনফিগার করতে হবে, যাতে Django জানে কোন ডোমেইন থেকে অ্যাপ্লিকেশনটি অ্যাক্সেস করা হবে:
# settings.py
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
১.২. Secret Key সুরক্ষিত করা
Django এর SECRET_KEY প্রোডাকশন এনভায়রনমেন্টে সুরক্ষিতভাবে রাখতে হবে। এটি কখনো কোডে হার্ডকোড করা উচিত নয়। আপনি এটি environment variable হিসেবে সেট করতে পারেন।
# settings.py
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
এটি ব্যবহার করতে, আপনার সার্ভারে DJANGO_SECRET_KEY ভেরিয়েবল তৈরি করতে হবে।
১.৩. স্ট্যাটিক ফাইল (Static files) কনফিগারেশন
স্ট্যাটিক ফাইলগুলিকে প্রোডাকশন সার্ভারে হ্যান্ডেল করার জন্য Whitenoise ব্যবহার করা যেতে পারে।
প্রথমে Whitenoise ইনস্টল করুন:
pip install whitenoise
এবার settings.py তে Whitenoise যুক্ত করুন:
# settings.py
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
# অন্যান্য middleware
]
এরপর STATICFILES_STORAGE সেট করুন:
# settings.py
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
২. Heroku তে Django অ্যাপ্লিকেশন ডিপ্লয়মেন্ট
Heroku একটি ক্লাউড প্ল্যাটফর্ম, যেখানে Django অ্যাপ্লিকেশন খুব সহজেই ডিপ্লয় করা যায়। এর জন্য Heroku CLI ইনস্টল করতে হবে।
২.১. Heroku অ্যাকাউন্ট এবং CLI ইনস্টলেশন
প্রথমে, Heroku এ অ্যাকাউন্ট তৈরি করুন এবং Heroku CLI ইনস্টল করুন।
২.২. Heroku অ্যাপ তৈরি করা
Heroku তে Django অ্যাপ ডিপ্লয় করার জন্য আপনাকে একটি অ্যাপ তৈরি করতে হবে। প্রথমে আপনার Django প্রজেক্ট ডিরেক্টরিতে গিয়ে লগইন করুন:
heroku login
তারপর, একটি নতুন Heroku অ্যাপ তৈরি করুন:
heroku create your-app-name
২.৩. Heroku তে ডিপ্লয়মেন্টের জন্য প্রস্তুতি
Heroku তে Django অ্যাপ ডিপ্লয় করতে হলে কিছু ফাইল এবং কনফিগারেশন প্রয়োজন হবে:
Procfile: এই ফাইলটি Heroku কে জানায় যে অ্যাপটি কিভাবে চালাতে হবে।
web: gunicorn your_project_name.wsgi
requirements.txt: আপনার প্রজেক্টের সব প্যাকেজ এবং লাইব্রেরি উল্লেখ করতে হবে।
pip freeze > requirements.txt
runtime.txt: Heroku কে জানায় যে আপনি কোন পাইটন ভার্সন ব্যবহার করতে চান।
python-3.x.x
gunicorn: এটি Heroku তে প্রোডাকশন সার্ভারে Django অ্যাপ চালানোর জন্য ব্যবহৃত হয়। এটি ইনস্টল করতে:
pip install gunicorn
- ডাটাবেস মাইগ্রেশন: Heroku তে ডিপ্লয় করার পর আপনাকে ডাটাবেস মাইগ্রেট করতে হবে:
heroku run python manage.py migrate
২.৪. Heroku তে অ্যাপ ডিপ্লয় করা
এখন, আপনি আপনার পরিবর্তিত ফাইলগুলো Git এ কমিট করুন এবং Heroku তে পুশ করুন:
git add .
git commit -m "Ready for deployment"
git push heroku master
আপনার অ্যাপ Heroku তে ডিপ্লয় হয়ে যাবে এবং আপনি এটি ব্রাউজারে দেখতে পাবেন।
৩. DigitalOcean (বা VPS) তে Django অ্যাপ্লিকেশন ডিপ্লয়মেন্ট
DigitalOcean হল একটি জনপ্রিয় ক্লাউড হোস্টিং সেবা যেখানে আপনি Django অ্যাপ্লিকেশন হোস্ট করতে পারেন।
৩.১. VPS সেটআপ
DigitalOcean তে একটি VPS (Virtual Private Server) তৈরি করুন এবং আপনার সার্ভার লগইন করুন। তারপর, Python, pip, Gunicorn, PostgreSQL, এবং Nginx ইন্সটল করুন।
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev
sudo apt install gunicorn
sudo apt install nginx
৩.২. প্রজেক্টের কোড সার্ভারে পুশ করা
আপনার প্রজেক্ট GitHub বা অন্য কোন ভার্সন কন্ট্রোল থেকে সার্ভারে পুশ করুন।
৩.৩. Gunicorn এবং Nginx সেটআপ
Gunicorn দিয়ে Django অ্যাপ চালানোর জন্য Gunicorn সার্ভিস তৈরি করুন। এরপর Nginx দিয়ে রিভার্স প্রক্সি কনফিগার করুন।
Gunicorn সার্ভিস ফাইল তৈরি করুন:
sudo nano /etc/systemd/system/gunicorn.service
এতে নিচের কনফিগারেশন যুক্ত করুন:
[Unit]
Description=gunicorn daemon for Django project
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/path/to/your/project.sock your_project_name.wsgi:application
[Install]
WantedBy=multi-user.target
এবার Gunicorn সার্ভিসটি চালু করুন:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
Nginx কনফিগারেশন:
sudo nano /etc/nginx/sites-available/your_project
এখানে, আপনার Nginx কনফিগারেশন যুক্ত করুন, যাতে রিভার্স প্রক্সি হিসেবে কাজ করে।
সার্ভার সিকিউরিটি এবং অন্যান্য কনফিগারেশন
- SSL: প্রোডাকশন সার্ভারে HTTPS সাপোর্টের জন্য SSL কনফিগার করুন। Let's Encrypt ব্যবহার করে SSL ফ্রি সেটআপ করতে পারেন।
- ডাটাবেস: প্রোডাকশন ডাটাবেস (যেমন PostgreSQL) ব্যবহার করুন এবং DATABASES কনফিগারেশন আপডেট করুন।
এভাবে, Django অ্যাপ্লিকেশনটি আপনি Heroku বা VPS (যেমন DigitalOcean) তে সফলভাবে ডিপ্লয় করতে পারবেন।
Django অ্যাপ্লিকেশন তৈরি করার সময়, অ্যাপ্লিকেশনটি কোন সার্ভারে রান করবে তা নির্ধারণ করা অত্যন্ত গুরুত্বপূর্ণ। WSGI (Web Server Gateway Interface) এবং ASGI (Asynchronous Server Gateway Interface) হল দুটি প্রধান ইন্টারফেস যা Django অ্যাপ্লিকেশনকে ওয়েব সার্ভারের সাথে সংযোগ স্থাপন করতে সাহায্য করে। WSGI সাধারণত সিঙ্ক্রোনাস অ্যাপ্লিকেশনদের জন্য ব্যবহৃত হয়, এবং ASGI অ্যাসিঙ্ক্রোনাস অ্যাপ্লিকেশনদের জন্য ব্যবহৃত হয়।
১. WSGI সার্ভার
WSGI একটি স্ট্যান্ডার্ড প্রোটোকল যা ওয়েব সার্ভার এবং Python অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। এটি সিঙ্ক্রোনাস অ্যাপ্লিকেশনের জন্য উপযুক্ত, এবং Django প্রজেক্টে এটি ডিফল্ট সার্ভার হিসেবে ব্যবহৃত হয়।
WSGI কনফিগারেশন
Django-তে WSGI কনফিগারেশন সাধারণত wsgi.py ফাইলে থাকে, যেটি প্রজেক্টের মূল ডিরেক্টরির মধ্যে থাকে। এই ফাইলটি অ্যাপ্লিকেশনটি সার্ভারের সাথে যুক্ত করতে ব্যবহৃত হয়।
wsgi.py ফাইলের উদাহরণ:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()
get_wsgi_application(): এটি Django অ্যাপ্লিকেশনকে WSGI সার্ভারের সাথে যুক্ত করতে ব্যবহৃত হয়।os.environ.setdefault(): এটি Django এর সেটিংস ফাইলটি নির্ধারণ করে, যাতে WSGI সার্ভার সেটিংস ফাইলটি সঠিকভাবে খুঁজে পায়।
WSGI সার্ভার নির্বাচন
Django প্রজেক্টে WSGI রান করার জন্য জনপ্রিয় সার্ভারগুলো হচ্ছে:
- Gunicorn: এটি একটি খুবই জনপ্রিয় WSGI সার্ভার যা উচ্চ পারফরমেন্স এবং সহজ কনফিগারেশনের জন্য ব্যবহৃত হয়।
- uWSGI: আরেকটি শক্তিশালী WSGI সার্ভার, যেটি বেশি কনফিগারেবল এবং অনেক সার্ভার ফিচার সমর্থন করে।
Gunicorn ইনস্টল এবং রান:
প্রথমে Gunicorn ইনস্টল করুন:
pip install gunicornতারপর, Gunicorn সার্ভারটি Django প্রজেক্টে রান করুন:
gunicorn myproject.wsgi:application
এখানে myproject.wsgi:application হলো WSGI অ্যাপ্লিকেশনের রেফারেন্স যা আপনি আপনার প্রজেক্টের পাথ অনুযায়ী পরিবর্তন করবেন।
২. ASGI সার্ভার
ASGI হল একটি অ্যাসিঙ্ক্রোনাস স্ট্যান্ডার্ড প্রোটোকল যা Django অ্যাপ্লিকেশনকে অ্যাসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস উভয় ধরনের সার্ভিস প্রদান করতে সক্ষম করে। এটি রিয়েল-টাইম কমিউনিকেশন এবং ওয়েবসকেটের মতো অ্যাসিঙ্ক্রোনাস কার্যকলাপের জন্য উপযুক্ত।
ASGI কনফিগারেশন
Django 3.0 থেকে ASGI সমর্থন যুক্ত হয়েছে, এবং এটি সাধারণত asgi.py ফাইলে কনফিগার করা হয়, যা wsgi.py ফাইলের অনুরূপ। ASGI ফাইলটি অ্যাপ্লিকেশনটি অ্যাসিঙ্ক্রোনাস পরিবেশে রান করার জন্য ব্যবহৃত হয়।
asgi.py ফাইলের উদাহরণ:
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
এখানে:
get_asgi_application(): এটি ASGI সার্ভারের সাথে Django অ্যাপ্লিকেশনকে যুক্ত করতে ব্যবহৃত হয়।
ASGI সার্ভার নির্বাচন
ASGI অ্যাপ্লিকেশনের জন্য কিছু জনপ্রিয় সার্ভার হল:
- Daphne: এটি Django Channels এর একটি অংশ এবং একটি ASGI সার্ভার যা রিয়েল-টাইম অ্যাপ্লিকেশন এবং ওয়েবসকেট ব্যবস্থাপনা সমর্থন করে।
- Uvicorn: এটি একটি দ্রুত এবং অ্যাসিঙ্ক্রোনাস ASGI সার্ভার যা খুবই জনপ্রিয় এবং ভালো পারফরম্যান্স প্রদান করে।
Daphne ইনস্টল এবং রান:
প্রথমে Daphne ইনস্টল করুন:
pip install daphneতারপর, Daphne সার্ভারটি Django প্রজেক্টে রান করুন:
daphne myproject.asgi:application
Uvicorn ইনস্টল এবং রান:
প্রথমে Uvicorn ইনস্টল করুন:
pip install uvicornতারপর, Uvicorn সার্ভারটি Django প্রজেক্টে রান করুন:
uvicorn myproject.asgi:application
৩. WSGI vs ASGI
| বৈশিষ্ট্য | WSGI (Web Server Gateway Interface) | ASGI (Asynchronous Server Gateway Interface) |
|---|---|---|
| অ্যাপ্লিকেশন প্রকার | সিঙ্ক্রোনাস | অ্যাসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস |
| সমর্থিত কাজ | সাধারণ ওয়েব পেজ, সিঙ্ক্রোনাস API | ওয়েবসকেট, রিয়েল-টাইম, লং পোলিং, অ্যাসিঙ্ক্রোনাস API |
| পারফরম্যান্স | ভালো, তবে কিছু লিমিটেশন রয়েছে | উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি |
| ব্যবহার | সাধারণ ওয়েব অ্যাপ্লিকেশন | রিয়েল-টাইম অ্যাপ্লিকেশন, ওয়েবসকেট |
সারাংশ
Django-তে WSGI এবং ASGI দুই ধরনের সার্ভার ব্যবহৃত হয়। WSGI সিঙ্ক্রোনাস অ্যাপ্লিকেশন জন্য ব্যবহৃত হয়, যেখানে ASGI অ্যাসিঙ্ক্রোনাস অ্যাপ্লিকেশন এবং রিয়েল-টাইম কার্যকলাপ (যেমন ওয়েবসকেট) পরিচালনার জন্য উপযুক্ত। Django-তে এগুলোর ব্যবহারের জন্য wsgi.py এবং asgi.py ফাইলগুলো কনফিগার করা হয়, এবং আপনি সার্ভার হিসেবে Gunicorn, uWSGI, Daphne, বা Uvicorn ব্যবহার করতে পারেন।
Django অ্যাপ্লিকেশনটি প্রোডাকশন পরিবেশে চালানোর জন্য Apache অথবা Nginx ওয়েব সার্ভার ব্যবহার করা হয়। এই ওয়েব সার্ভারগুলি Django অ্যাপ্লিকেশনকে রিভার্স প্রোক্সি হিসেবে কাজ করার জন্য কনফিগার করা হয়, যা মিডলওয়ার বা সার্ভারের মধ্যে বিভিন্ন রিকোয়েস্ট হ্যান্ডলিং ও লোড ব্যালান্সিং ম্যানেজ করে।
এখানে, আমরা Apache এবং Nginx উভয়ের সাথে Django ডেপ্লয়মেন্ট সেটআপ করার জন্য প্রাথমিক স্টেপগুলি আলোচনা করব।
১. Apache এর সাথে Django ডেপ্লয়মেন্ট
Apache সাধারণত mod_wsgi এর মাধ্যমে Django অ্যাপ্লিকেশন চালাতে ব্যবহৃত হয়। mod_wsgi হল একটি Apache মডিউল যা Python অ্যাপ্লিকেশন চালানোর জন্য ব্যবহৃত হয়। Django অ্যাপ্লিকেশনকে Apache সার্ভারে ডেপ্লয় করতে আপনাকে কয়েকটি স্টেপ অনুসরণ করতে হবে।
১.১. Apache এবং mod_wsgi ইনস্টল করা
প্রথমে আপনাকে Apache এবং mod_wsgi ইনস্টল করতে হবে। Ubuntu-তে এটি ইনস্টল করতে কমান্ড ব্যবহার করুন:
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi-py3
১.২. Django অ্যাপ্লিকেশন প্রস্তুত করা
আপনার Django প্রজেক্টটি অবশ্যই settings.py ফাইলে ALLOWED_HOSTS এবং STATIC_ROOT কনফিগার করা থাকতে হবে।
# settings.py
ALLOWED_HOSTS = ['your-domain.com', 'your-server-ip']
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
১.৩. Static ফাইলের জন্য collectstatic চালানো
Apache/Django সার্ভারে স্ট্যাটিক ফাইলগুলিকে যথাযথভাবে সার্ভ করার জন্য আপনাকে collectstatic কমান্ড চালাতে হবে।
python manage.py collectstatic
১.৪. Apache কনফিগারেশন সেটআপ
Apache কনফিগারেশন ফাইলে আপনার Django অ্যাপ্লিকেশন সার্ভ করার জন্য mod_wsgi ব্যবহার করতে হবে। একটি নতুন Apache কনফিগারেশন ফাইল তৈরি করুন।
sudo nano /etc/apache2/sites-available/django_project.conf
এটি নিম্নরূপ কনফিগার করুন:
<VirtualHost *:80>
ServerName your-domain.com
DocumentRoot /path/to/your/project
WSGIDaemonProcess django_project python-path=/path/to/your/project:/path/to/your/project/venv/lib/python3.x/site-packages
WSGIProcessGroup django_project
WSGIScriptAlias / /path/to/your/project/project_name/wsgi.py
Alias /static/ /path/to/your/project/static/
<Directory /path/to/your/project/static>
Require all granted
</Directory>
<Directory /path/to/your/project/project_name>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
এখানে:
WSGIScriptAlias: এটি Django এরwsgi.pyফাইলের পাথ নির্দেশ করে, যা Django অ্যাপ্লিকেশনকে Apache এর মাধ্যমে সার্ভ করতে সাহায্য করে।Alias /static/: স্ট্যাটিক ফাইলগুলি সার্ভ করার জন্য কনফিগার করা হয়েছে।
১.৫. Apache রিস্টার্ট করা
কনফিগারেশন ফাইলটি সেভ করার পর, Apache সার্ভারটি রিস্টার্ট করুন।
sudo a2ensite django_project.conf
sudo systemctl restart apache2
২. Nginx এর সাথে Django ডেপ্লয়মেন্ট
Nginx হল একটি হাই-পারফরম্যান্স ওয়েব সার্ভার যা সাধারণত রিভার্স প্রোক্সি হিসেবে ব্যবহৃত হয়। Django অ্যাপ্লিকেশন Nginx এর সাথে সার্ভ করতে আপনি uWSGI ব্যবহার করতে পারেন, যা Nginx এবং Django অ্যাপ্লিকেশন এর মধ্যে যোগাযোগ স্থাপন করে।
২.১. Nginx এবং uWSGI ইনস্টল করা
প্রথমে Nginx এবং uWSGI ইনস্টল করতে হবে।
sudo apt-get update
sudo apt-get install nginx
sudo apt-get install uwsgi
sudo apt-get install uwsgi-plugin-python3
২.২. Django অ্যাপ্লিকেশন প্রস্তুত করা
settings.py ফাইলে ALLOWED_HOSTS, STATIC_ROOT, এবং MEDIA_ROOT কনফিগার করুন।
# settings.py
ALLOWED_HOSTS = ['your-domain.com', 'your-server-ip']
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
২.৩. uWSGI কনফিগারেশন
আপনার Django অ্যাপ্লিকেশনকে uWSGI ব্যবহার করে Nginx এর মাধ্যমে চালাতে হবে। প্রথমে uWSGI কনফিগারেশন ফাইল তৈরি করুন।
sudo nano /etc/uwsgi/apps-available/django_project.ini
এই কনফিগারেশন ফাইলে নিম্নরূপ লিখুন:
[uwsgi]
chdir = /path/to/your/project
module = project_name.wsgi:application
home = /path/to/your/project/venv
master = true
processes = 5
socket = /path/to/your/project/django_project.sock
chmod-socket = 666
vacuum = true
static-map = /static=/path/to/your/project/static
এখানে:
module: আপনার Django প্রজেক্টেরwsgi.pyফাইলের পাথ নির্দেশ করছে।socket: uWSGI এবং Nginx এর মধ্যে যোগাযোগের জন্য Unix socket ব্যবহার করা হচ্ছে।
২.৪. Nginx কনফিগারেশন
এখন, Nginx এর কনফিগারেশন ফাইল তৈরি করুন এবং সেটআপ করুন।
sudo nano /etc/nginx/sites-available/django_project
এটি নিম্নরূপ কনফিগার করুন:
server {
listen 80;
server_name your-domain.com;
location / {
uwsgi_pass unix:/path/to/your/project/django_project.sock;
include uwsgi_params;
}
location /static/ {
alias /path/to/your/project/static/;
}
location /media/ {
alias /path/to/your/project/media/;
}
}
এখানে:
uwsgi_pass: uWSGI এর সকেটের পাথ নির্দেশ করছে।alias: স্ট্যাটিক এবং মিডিয়া ফাইলের পাথ নির্দেশ করছে।
২.৫. Nginx এবং uWSGI রিস্টার্ট করা
এখন, Nginx এবং uWSGI সার্ভার রিস্টার্ট করুন।
sudo ln -s /etc/nginx/sites-available/django_project /etc/nginx/sites-enabled
sudo systemctl restart nginx
sudo systemctl start uwsgi
সারাংশ
- Apache এর সাথে Django ডেপ্লয়মেন্টে mod_wsgi ব্যবহার করা হয়। এটি Django অ্যাপ্লিকেশনকে Apache সার্ভারে রান করার জন্য একটি অ্যাড-অন মডিউল।
- Nginx এর সাথে Django ডেপ্লয়মেন্টে uWSGI ব্যবহৃত হয়, যা Nginx এবং Django অ্যাপ্লিকেশন এর মধ্যে একটি ব্রিজ হিসেবে কাজ করে।
- Apache এবং Nginx উভয়ই জনপ্রিয় ওয়েব সার্ভার এবং তারা Django অ্যাপ্লিকেশন সার্ভ করার জন্য উন্নত পারফরম্যান্স প্রদান করে, বিশেষ করে প্রোডাকশন পরিবেশে।
Django তে Database Backup এবং Static/Media Files ব্যবস্থাপনা গুরুত্বপূর্ণ কাজ। যখন আপনার Django অ্যাপ্লিকেশনটি উৎপাদন পরিবেশে চলে আসে, তখন আপনার ডেটাবেসের নিরাপত্তা এবং স্ট্যাটিক/মিডিয়া ফাইলের সঠিক ব্যবস্থাপনা নিশ্চিত করা প্রয়োজন। এই দুইটি বিষয় Django অ্যাপ্লিকেশনের সঠিক কার্যকারিতা এবং নিরাপত্তা রক্ষায় গুরুত্বপূর্ণ ভূমিকা পালন করে।
এখানে আমরা আলোচনা করবো কিভাবে Django তে ডেটাবেস ব্যাকআপ এবং স্ট্যাটিক/মিডিয়া ফাইলগুলোর সঠিক ব্যবস্থাপনা করা যায়।
১. Django তে Database Backup
ডেটাবেসের ব্যাকআপ একটি গুরুত্বপূর্ণ কাজ, কারণ এটি নিশ্চিত করে যে যদি কোনো কারণে ডেটাবেসের তথ্য হারিয়ে যায়, তাহলে আপনি সেগুলি পুনরুদ্ধার করতে পারবেন। Django তে ডেটাবেস ব্যাকআপ নেওয়ার কিছু সাধারণ উপায় রয়েছে।
১.1. Django এর dumpdata কমান্ড ব্যবহার
Django তে dumpdata কমান্ড ব্যবহার করে আপনি ডেটাবেসের সমস্ত ডেটা JSON ফরম্যাটে এক্সপোর্ট করতে পারেন। এটি একটি সহজ এবং কার্যকরী উপায় ডেটাবেস ব্যাকআপ নেওয়ার জন্য।
python manage.py dumpdata > backup.json
এখানে:
dumpdataকমান্ডটি Django ডেটাবেস থেকে সমস্ত মডেলগুলির ডেটা JSON ফরম্যাটে এক্সপোর্ট করবে এবংbackup.jsonফাইলে সংরক্ষণ করবে।- আপনি নির্দিষ্ট মডেলের ডেটা এক্সপোর্ট করতে চাইলে, মডেল নাম নির্দিষ্ট করতে পারেন:
python manage.py dumpdata app_name.ModelName > backup.json
১.2. Django এর dbbackup প্যাকেজ ব্যবহার
Django এর django-dbbackup প্যাকেজ ব্যবহার করে আপনি ডেটাবেস ব্যাকআপ এবং রিস্টোর করার কাজ সহজে করতে পারেন। এটি আপনাকে ডেটাবেসের ব্যাকআপ নেওয়া এবং পুনরুদ্ধারের জন্য আরও শক্তিশালী টুলস প্রদান করে।
প্রথমে django-dbbackup ইনস্টল করতে হবে:
pip install django-dbbackup
এরপর, settings.py তে কিছু কনফিগারেশন করতে হবে:
# settings.py
INSTALLED_APPS = [
...
'dbbackup',
]
# ডেটাবেস ব্যাকআপের জন্য ডিরেক্টরি
DBBACKUP_STORAGE = 'dbbackup.storage.filesystem'
DBBACKUP_STORAGE_DIRECTORY = 'path/to/backup/directory/'
এখানে:
DBBACKUP_STORAGE: ব্যাকআপ ফাইল কোথায় সংরক্ষণ হবে তা নির্দিষ্ট করে।DBBACKUP_STORAGE_DIRECTORY: ব্যাকআপের জন্য ডিরেক্টরি সেট করে।
ব্যাকআপ নিতে:
python manage.py dbbackup
১.3. ব্যাকআপ পুনরুদ্ধার
আপনি পূর্বে নেয়া ব্যাকআপ পুনরুদ্ধার করতে loaddata কমান্ড ব্যবহার করতে পারেন:
python manage.py loaddata backup.json
এটি backup.json ফাইল থেকে সমস্ত ডেটা পুনরুদ্ধার করবে।
২. Static এবং Media Files ব্যবস্থাপনা
Django তে Static Files এবং Media Files দুটি আলাদা ধরনের ফাইল:
- Static Files: CSS, JavaScript, ইমেজ ফাইল যা ওয়েব পেজের ডিজাইন এবং ফাংশনালিটিকে সমর্থন করে।
- Media Files: ব্যবহারকারীর আপলোড করা ফাইল, যেমন ইমেজ, ভিডিও বা ডকুমেন্ট।
২.১. Static Files ব্যবস্থাপনা
Django তে Static Files ব্যবস্থাপনা করার জন্য সাধারণত STATIC_URL এবং STATIC_ROOT কনফিগারেশন ব্যবহার করা হয়।
Static ফাইল কনফিগারেশন
# settings.py
STATIC_URL = '/static/'
# ডেভেলপমেন্টে, স্ট্যাটিক ফাইল যেখানে রাখা হবে
STATICFILES_DIRS = [
BASE_DIR / 'static',
]
# প্রোডাকশনে, স্ট্যাটিক ফাইল কোথায় সংরক্ষিত হবে
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL: স্ট্যাটিক ফাইলের পাথ।STATICFILES_DIRS: ডেভেলপমেন্ট পরিবেশে স্ট্যাটিক ফাইলের জন্য ফোল্ডার।STATIC_ROOT: প্রোডাকশন পরিবেশে স্ট্যাটিক ফাইলের জন্য ফোল্ডার।
Static Files একত্রিত করা (collectstatic)
প্রোডাকশনে স্ট্যাটিক ফাইল একত্রিত করার জন্য collectstatic কমান্ড ব্যবহার করা হয়:
python manage.py collectstatic
এটি সমস্ত স্ট্যাটিক ফাইলগুলো STATIC_ROOT ফোল্ডারে একত্রিত করবে, যাতে সেগুলি প্রোডাকশন পরিবেশে ব্যবহার করা যায়।
২.২. Media Files ব্যবস্থাপনা
Media Files হলো সেই ফাইলগুলো যা ইউজাররা আপলোড করে, যেমন ইমেজ, ডকুমেন্ট ইত্যাদি। Django তে MEDIA_URL এবং MEDIA_ROOT কনফিগারেশন ব্যবহার করে মিডিয়া ফাইলগুলো ব্যবস্থাপনা করা হয়।
Media ফাইল কনফিগারেশন
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL: মিডিয়া ফাইলের URL পাথ।MEDIA_ROOT: মিডিয়া ফাইল যেখানে সেভ হবে।
URL কনফিগারেশন
আপনার urls.py ফাইলে মিডিয়া ফাইল সার্ভ করার জন্য কনফিগারেশন করতে হবে। ডেভেলপমেন্ট পরিবেশে এই কনফিগারেশন প্রয়োজন।
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# অন্যান্য URL প্যাটার্ন
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
এটি Django কে বলে দেয় যে, MEDIA_URL পাথের মাধ্যমে MEDIA_ROOT ডিরেক্টরি থেকে মিডিয়া ফাইল সরবরাহ করা হবে।
৩. Static এবং Media Files সার্ভিং প্রোডাকশন পরিবেশে
প্রোডাকশন পরিবেশে Static এবং Media Files সার্ভ করতে আলাদা সার্ভারের (যেমন Nginx) সাহায্য নেওয়া হয়। Django নিজে স্ট্যাটিক এবং মিডিয়া ফাইল সার্ভিং করার জন্য উপযুক্ত নয়, তাই প্রোডাকশনে এগুলো আলাদা সার্ভারে সার্ভ করা হয়।
Nginx কনফিগারেশন উদাহরণ:
# static files configuration
location /static/ {
alias /path/to/staticfiles/;
}
# media files configuration
location /media/ {
alias /path/to/media/;
}
এখানে:
/static/এবং/media/পাথগুলো Nginx সার্ভার দ্বারা সরবরাহ করা হবে।
সারাংশ
- Database Backup: Django তে ডেটাবেস ব্যাকআপ নেওয়ার জন্য
dumpdata,dbbackupপ্যাকেজ ব্যবহার করা হয়। - Static Files: স্ট্যাটিক ফাইলের ব্যবস্থাপনা
STATIC_URL,STATICFILES_DIRSএবংcollectstaticকমান্ড দ্বারা করা হয়। - Media Files: মিডিয়া ফাইলের ব্যবস্থাপনা
MEDIA_URL,MEDIA_ROOTকনফিগারেশন দ্বারা করা হয় এবং ইউজারদের আপলোড করা ফাইল সার্ভ করতে Django-তে কনফিগার করা হয়।
Django তে সঠিকভাবে ডেটাবেস ব্যাকআপ এবং Static/Media Files ব্যবস্থাপনা নিশ্চিত করা, আপনার অ্যাপ্লিকেশনের নিরাপত্তা এবং পারফরম্যান্স নিশ্চিত করে।
Read more